# coding:utf-8
'''
Created on 2015年6月26日

@author: Emrys
'''
from socket import socket, AF_INET, SOCK_STREAM
from functools import partial


class LazyConnection:

    def __init__(self, address, family=AF_INET, type=SOCK_STREAM):
        self.address = address
        self.family = family
        self.type = AF_INET
        self.sock = None

    def __enter__(self):
        if self.sock is not None:
            raise RuntimeError('Already connected')
        self.sock = socket(self.family, self.type)
        self.sock.connect(self.address)
        return self.sock

    def __exit__(self, exc_ty, exc_val, tb):
        self.sock.close()
        self.sock = None


conn = LazyConnection(("www.python.org", 80))

with conn as s:
    s.send(b"GET /index.html HTTP/1.0\r\n")
    s.send(b"Host: www.python.org\r\n")
    s.send(b'\r\n')
    resp = b''.join(iter(partial(s.recv, 8192), b''))
    print(resp)
